-1- Inhalt 1 Einleitung zu command.prg ........................................ 3 2 Allgemeine Hinweise zur Befehlseingabe ........................... 4 3 Allgemeine Befehle ............................................... 7 3.1 Besondere Befehle ............................................ 27 3.2 Zahlkonvertierungen .......................................... 28 4 Die ALIAS-Einrichtung ............................................ 29 4.1 Einfhrung ................................................... 29 4.2 ALIAS-Befehlssatz ............................................ 29 5 Die History-Einrichtung .......................................... 31 5.1 Einfhrung ................................................... 31 5.2 Die !-Befehle ................................................ 33 6 Das Batch-Processing ............................................. 34 6.1 Einfhrung ................................................... 34 6.2 Befehlssatz .................................................. 34 6.3 Beispiele .................................................... 41 6.3.1 Bsp.1 .................................................... 41 6.3.2 Bsp.2 .................................................... 42 6.3.3 Bsp.3 .................................................... 43 7 Variablen ........................................................ 44 7.1 Allgemeines zu den Variablen ................................. 46 7.2 Beispiel ..................................................... 47 7.2.1 Der File cc .............................................. 48 8 EDI .............................................................. 49 8.1 Die Kommandos von EDI ........................................ 49 9 Fehlermeldungen .................................................. 51 10 Die Ausgabeumleitung ............................................ 54 11 Allgemeines Blabla zum Schluž ................................... 55 11.1 Lieferumfang ................................................ 55 11.2 Zur Programmierung .......................................... 55 12 ANHANG A (Befehlszusammenfassung) ............................... 58 13 ANHANG B (oldy-Beispiele) ....................................... 61 13.1 Beispiel 1 fr die Verwendung des oldy-Befehls .............. 61 -2- 13.2 oldy, die Zweite ............................................ 62 14 Index ........................................................... 63 -3- 1 Einleitung zu command.prg command.prg ist ein Kommandointerpreter, der auf herk”mmliche Art (… la MS-DOS o.„.), also ohne GEM oder „hnliche Bedienoberfl„chen, die Arbeit mit dem ATARI untersttzen soll. Er umfažt die dafr blichen Befehle wie z.B. fr das Filekopieren, das Filel”schen oder die Fileumbenen- nung. Einige Befehle wurden bei UNIX abgeschaut. Ein Teil der Historyeinrich- tung findet in „hnlicher Form unter VMS Verwendung. Die Befehle mssen via Tastatur eingegeben werden. Es wird zur Benutzung also kein Gebrauch von der Maus gemacht! šber die bereits erw„hnte Historyeinrichtung ist es m”glich, alte Befehle relativ einfach erneut aufzurufen, ohne eine komplette Neuein- gabe der Zeile vornehmen zu mssen. Im Folgenden findet sich eine Zusammenstellung der Befehle mit Be- schreibung, sowie eine Erkl„rung zu den zus„tzlichen Features wie z.B. das Batchprocessing. Es versteht sich wohl von selbst, daž ich fr das korrekte Funktionie- ren des Programms keine Garantie bernehme. Datenverluste, die durch auftretende Programmfehler oder eine fehlerhafte Bedienung verursacht worden sind, hat jeder selbst zu verdauen! Gefundene Fehler oder Probleme bitte ich an mich weiterzuleiten (meine Adresse steht im 'Allgemeinen Blabla'-Abschnitt). -4- 2 Allgemeine Hinweise zur Befehlseingabe Die Eingabe eines Befehls kann mit Hilfe der Cursortasten, der DELETE- Taste, der ESC-Taste und der BACKSPACE-Taste korrigiert werden! CONTROL-'<-' bzw. CONTROL-'->' bringen den Cursor an den Zeilenanfang / das Zeilenende. SHIFT-'->' bzw. SHIFT-'<-' bringen den Cursor ein Wort nach rechts / links. CONTROL-X vertauscht das aktuelle mit dem folgenden Zeichen. CONTROL-D l”scht alle Zeichen vom Prompt bis zur Cursorposition. INSERT expandiert einen Eingabestring, wenn es einen File im aktuellen Ordner gibt, der mit diesem String beginnt. Man befindet sich brigens die ganze Zeit in einem Einfgemodus, d.h. beim Korrigieren einer Zeile werden keine Zeichen berschrieben. šberflssige Zeichen mssen also explizit gel”scht werden! Die ESC-Taste l”scht die komplette Zeile. Die anderen Tasten haben ihre bliche Funktion. Viele Befehle erwarten mehrere Argumentangaben oder lassen mehrere Argumente zu. Diese mssen jeweils durch einen Blank abgegrenzt sein, z.B. wrde "dir *.prg *.tos" zuerst alle PRG-Files und dann alle TOS- Dateien des aktuellen Verzeichnisses aufzeigen. Dem Benutzer „lterer Versionen des Interpreters f„llt vielleicht auf, daž die Anmerkung nur Befehlseingaben in Kleinbuchstaben vorzunehmen, nicht mehr vorhanden ist. Diese Restriktion habe ich entfernt. Es k”nnen jetzt Eingaben in Grož- und Kleinschreibung erfolgen. Man muž allerding beachten, daž bei einer Eingabe der erste String in Kleinbuchstaben umgewandelt wird, die Argumentangaben bleiben unver„n- dert. ACHTUNG! Ich bin inzwischen dazu bergegangen, Befehle aus dem Interpreter zu entfernen. Es handelt sich dabei ausnahmslos um Kommandos, die durch andere einfach nachgebildet werden k”nnen (z.B. hide). Der Grund liegt einmal in der Ersparnis von Speicher. Das Programm belegt in der jetzigen Form mit Variablen und Pufferbereichen fast 100kB RAM. Es sind bereits Leute gekommen, die wegen dieses Umfangs Speicherprobleme bekommen haben. Zweitens hat die Vielfalt der Kommandos nicht besonders -5- zur šbersichtlichkeit beigetragen. Es wurden aber wirklich nur doppelt gemoppelte Kommandos entfernt. Die Beschreibung enth„lt an den relevan- ten Stellen Hinweise, wie man diese Befehle nachbilden kann! Bei der folgenden Befehlsbeschreibung sind '[ ]'-Argumentangaben als optional zu verstehen und '< >' als zwingend. Sind Argumente z.B. durch '(s)' als Plural gekennzeichnet, bedeutet dies, daž mehrere Argumente angegeben werden k”nnen (nicht mssen). Es gibt eine ganze Reihe von Fehlermeldungen, die es dem Benutzer erleichtern sollen, einen Fehler bzw. ein aufgetretenes Problem zu erkennen. Durch die Verbindung einer Fehlermeldung mit einer Fehlernum- mer, ist der Benutzer von Batchdateien in der Lage, auf bestimmte Situationen individuell zu reagieren. Eine weitere F„higkeit des Interpreters soll auch schon an dieser Stelle Erw„hnung finden. Man kann von ihm aus externe Programme aufrufen. Kann ein eingegebenes Kommando nicht als interner Befehl erkannt werden, wird versucht, ob es ein Programm gibt, daž diesem Befehlsnamen entspricht. Ist dies der Fall, wird es aufgerufen (das bezieht sich auf TOS, TTP und PRG-Dateien). Programme, die sich im aktuellen Verzeichnis befinden und die aufgerufen werden sollen, mssen nicht mit ihrem vollen Namen bezeichnet werden! Es wird das erste Programm gestartet, daž mit dem eingegebenen Teilstring bereinstimmt und eine der obigen Extensions hat. Die Einschr„nkung mit dem aktuellen Verzeichnis besteht ab dieser Version nicht mehr, d.h. auch Programme aus anderen Ordnern und Laufwerken k”nnen via Teilstring aufgerufen werden! Fr die notwendige Eindeutigkeit muž der Benutzer allerdings selber sorgen. Soll z.B. ein Programm 'programm.tos' aufgerufen werden, gengt es 'programm' oder sogar noch weniger Zeichen einzugeben, um es zu starten. Es versteht sich wohl von selbst, daž eingegebene Argumente an diese Programme weitergegeben werden. Der Benutzer kann mithilfe des path-Befehls bestimmte Suchpfade ange- ben, die der Interpreter auf der Suche nach einem bestimmten Programm abklappert. In den Vorg„ngerversionen des Interpreters wurde nach dem Lauf eines '.PRG'-Programms der Bildschirm gel”scht. Dieses Verhalten fanden allerdings einige Leute nicht so besonders toll. Aus diesem Grund wird nun keine L”schung mehr vorgenommen. Der Cursor befindet sich nach dem Programmlauf in der letzten Zeile (die allerdings gel”scht wird). Ob es nun unter Umst„nden zu kleineren Unsch”nheiten mit dem Mauszeiger kommt, bleibt abzuwarten. -6- Die Befehle in der folgenden Beschreibung sind durch ein vorangestell- tes '->' und eine einfache Unterstreichung kenntlich gemacht. Da es zahlreiche Kommandos gibt, die nur durch eine Abkrzung repr„sen- tiert sind (z.B. cp fr copy), werden dort die vollst„ndige Ausschrei- bung der Kommandos angegeben. Dies scheint mir fr ein einfacheres Einpr„gen der Befehle f”rderlich zu sein. Durch h„ufigen Gebrauch von Beispielen habe ich versucht, die Befehle und ihre Funktion transparenter zu machen. Einige dieser Beispiele enthalten Hinweise, die zu einer bequemeren Handhabung des Interpreters fhren sollen. Es ist daher nicht ganz sinnlos, sich mit diesem zus„tzlichen Geschwafel auseinanderzusetzen. -7- 3 Allgemeine Befehle -> ?ok Diesen Befehl und den zugeh”rigen File checksum.dat gibt es nicht mehr. Es konnte praktisch jeder die Zahl in der angesprochenen Datei „ndern und so eine Warnung provozieren, also hat das Kommando seinen Sinn leider verfehlt. Ich m”chte an dieser Stelle noch auf die inzwischen doch recht zahlreich vorhandenen PD-Programme hinweisen, die ein Erkennen von Viren zulassen. Die Verwendung eines solchen Programms sei jedem nur w„rmstens empfohlen! -> bell Dieser Befehl l„žt den ATARI einmal 'klingeln'. Man kann mit diesem Kommando z.B. das Ende einer Batchfilebearbeitung akustisch hervorhe- ben. -> cat (kompletter Name: concatenate) Gibt den Inhalt eines ASCII-Text-Files auf den Bildschirm aus. Die Ausgabe kann jederzeit mit ^Z abgebrochen werden. Der Befehl erlaubt es, mehrere Dateien anzugeben. Beim Versuch z.B. eine Programmdatei auszugeben, bricht natrlich das Chaos aus! Durch F1 (damit ist die Funktionstaste gemeint) kann die Ausgabe angehalten werden, durch erneuten Druck auf F1 wird sie wieder fortgesetzt. Man kann dieses Kommando brigens auch auf andere Verzeichnisse und Laufwerke anwenden! BEISPIEL: cat *.c Hier werden alle 'C'-Dateien ausgegeben. cat command.txt test.txt *.dat Es wird erst der File 'command.txt' ausgegeben, dann die Datei 'test.txt' und zum Schluž alle 'dat'-Files. cat /test/*.dat Ausgabe aller 'dat'-Files, die sich im Ordner 'test' befinden. -> cd (kompletter Name: change directory) Dieses Kommando wird zum Wechseln von Verzeichnissen benutzt. -8- Soll zu einem Ordner gewechselt werden, der sich im aktuellen Directory befindet, gengt es, die ersten Buchstaben (bis Eindeutigkeit herge- stellt ist), einzugeben. Es wird immer das erste Verzeichnis angesprungen, daž mit diesem Teilstring bereinstimmt. Es ist ab und zu schon vorgekommen, daž beim Wechseln von Laufwerken, zwar so getan wird, als h„tte ein solcher stattgefunden, man sich aber in Wirklichkeit immer noch an der gleichen Stelle befindet. Hier scheint es ein Problem im TOS zu geben (GEMDOS-Routine Dsetdrv). Dieses Verhalten habe ich allerdings bisher nur bei Floppylaufwerken beobach- ten k”nnen. Ramdisks oder verschiedene Partitions einer Harddisk bereiten keine Probleme. Ich m”chte mit diesem Hinweis allerdings nicht sagen, daž jetzt dauernd mit dieser Nichtwechselei zu rechnen ist, also keine Panik! BEISPIEL: cd subdir Wechselt vom aktuellen Verzeichnis in das Unterverzeichnis 'subdir'. cd a:bingo Wechselt das Laufwerk, vom aktuellen Laufwerk auf Laufwerk A, und geht dort in den Ordner 'bingo'. cd .. Vom aktuellen Unterverzeichnis wird in das Verzeichnis gegangen, daž sich eine Ebene ber dem Unterverzeichnis befindet. Verh„lt sich also analog zu einem Anklicken der oberen linken Fensterecke unter GEM. cd / (oder cd \) Wechselt in das Wurzelverzeichnis des aktuellen Laufwerks. cd d: Wechselt nur das Laufwerk. Die Eingabe von 'd:' bewirkt brigens das gleiche (s.u.). -> chmod ... (kompletter Name: change mode) Dieser Befehl kann zur Žnderung von Fileattributen benutzt werden. Bei den Fileangaben kann mit '*' gearbeitet werden. 'mode' repr„sentiert eine Integerzahl, die das neue Attribut darstellt. Man sollte bei Verwendung dieses Befehls etwas Vorsicht walten lassen. -9- Ich habe z.B. mal aus einem normalen auto.com-File ein Volumelabel gemacht. Leider hat die Rckfhrung in eine normale Datei nicht mehr funktioniert. Das Betriebssystem ist hier leider ziemlich restriktiv ausgelegt! Es ist mir bis jetzt auch noch nicht gelungen, Verzeichnissen z.B. das read only-Attribut zu vergeben (was ja als Schutzfunktion recht ntzlich w„re). Irgendwie hat man auf solche Eintr„ge keinen Zugriff via Fattrib(). An dieser Stelle ist eine Zusammenstellung der Bits und ihrer Bedeutung wohl ganz hilfreich: Bit 0: Datei ist schreibgeschtzt Bit 1: Datei ist versteckt (wenigstens ein bižchen) Bit 2: es handelt sich um eine Systemdatei (habe bis jetzt noch keine gefunden) Bit 3: Volumelabel (kann man z.B. beim Formatieren angeben) Bit 4: Verzeichnis Bit 5: ist das Archivbit (Kennung wc) Um die entsprechende Eigenschaft zu besitzen muž das jeweilige Bit gesetzt sein! BEISPIEL: chmod *.prg 1 Allen PRG-Dateien im aktuellen Ordner wird das nur lesen-Attribut verliehen. chmod *.prg 1 *.txt 0 PRG-Files werden mit dem nur lesen-Attribut, TXT-Dateien erhalten das normale Schreiben/Lesen-Attribut. -> cls (kompletter Name: clear screen) Es wird mit diesem Befehl nur der Bildschirm gel”scht. -> cmp (kompetter Name: compare) Vergleicht den Inhalt zweier Files miteinander. Ist dieser gleich, wird nichts zurckgemeldet, ansonsten ein files differ. Es ist bei diesem Befehl m”glich, sich auf andere Laufwerke und andere Ordner zu beziehen. Wem es ab und zu schon passiert ist, daž ein scheinbar korrekt abgelaufener Kopiervorgang doch nicht so recht funktionierte, wird diesen Befehl zu sch„tzen wissen. -10- BEISPIEL: cmp c:command.txt a:command.txt Vergleich der beiden Dateien, die sich auf unterschiedlichen Laufwerken befinden. cmp command.txt command.txt Dieser Befehl wird nicht ausgefhrt, da davon auszugehen ist, daž es sich um ein und denselben File handelt. -> compress Dieses Kommando komprimiert Dateien. Die Ausgabefiles besitzen die Extension 'CPR'. Die ursprnglichen Files werden mit expand wieder erzeugt. Das Ergebnis der Kompaktierung ist alles in allem nicht besonders berauschend, aber ein bižchen schaut schon dabei heraus. Sollte jemand auf eine wirklich effektiv arbeitende Kompaktierung angewiesen sein, so m”chte ich diesen auf Programme wie ARC oder ZOO verweisen. Žltere Versionen des Kommandointerpreters konnten nur reine ASCII- Textdateien packen. Diese Einschr„nkung gilt nicht mehr. Dieser Vorteil hat allerdings einen kleinen Haken, redundante Texte wie z.B. Leerzei- len, die nur Blanks enthalten oder Zeilen, die mit Blanks aufh”ren, werden nicht mehr entfernt! Nach der Erweiterung mit expand hat man also wieder den ursprnglichen File vor sich. Das Verfahren, das hinter diesem Kommando steht ist brigens ganz einfach: es werden alle Strings, die aus mehr als zwei gleichen Zeichen bestehen, zu drei Byte-Strings zusammengefažt. Besonders gute Opfer fr diesen Befehl sind mit dem Editor TEMPUS erstellte Dateien. Da dieser leider nicht in der Lage ist, vernnftig mit TAB-Zeichen umzugehen (und stattdessen das idiotische ATARI- spezifische Zeichen bzw. die eingestellte Anzahl von BLANKs macht), bringt hier die Komprimierung schon einige Bytes an Ersparniss. Sollte irgendwann einmal eine Version dieses, ansonsten wirklich guten, Editors herauskommen, die eine brauchbare Einbindung und Verarbeitung von TAB beinhaltet, bringt die Komprimierung natrlich auch nicht mehr diese Ergebnisse. BEISPIEL: compress beispiel.txt Kompaktiert die Datei 'beispiel.txt'. Der erzeugte File heižt 'beispiel.cpr'. 'beispiel.txt' selbst wird nicht ver„ndert! -11- -> cp (kompletter Name: copy) Dieser Befehl wird zum Kopieren von Dateien benutzt. 'fileA' wird dabei in 'fileB' kopiert. Der Befehl ist so ausgelegt, daž in weitem Umfang auf andere Laufwerke und Verzeichnisse zugegriffen werden kann. Die Verwendung von '*' bietet ein zus„tzliches Maž an Flexibilit„t. W„hrend dem Kopiervorgang wird angezeigt, welche Files gerade dupli- ziert werden. Sicherheitshalber sollte beim Kopieren in oder aus Verzeichnissen der vollst„ndige Pfad angegeben werden! Wird nur ein Argument angegeben, so ersetzt das Programm das zweite durch '*.*'. BEISPIEL: cp c:command.txt d:\subdir\*.* In diesem Beispiel wird der File 'command.txt' vom Hauptdirectory auf Laufwerk C in das Subdirectory 'subdir' auf Laufwerk D kopiert. Es kann brigens statt '\' auch '/' verwendet werden. cp *.prg a: Kopiert alle PRG-Dateien des aktuellen Verzeichnisses auf Laufwerk A. cp *.* d:/allefiles/*.* Hier werden alle Files des aktuellen Ordners in das Directory 'allefiles' auf Laufwerk D kopiert. cp c:xyz.dat Der File 'xyz.dat' wird vom Laufwerk C in das Verzeichnis kopiert, in dem man sich gerade befindet. Der Name der neuen Datei ist dabei auch wieder 'xyz.dat'. -> crsoff (kompletter Name: cursor off) Schaltet den Cursor aus. -> crson (kompletter Name: cursor on) Schaltet den Cursor ein. -> crypt M”chte man einen File ver- bzw. entschlsseln, so kann dazu dieser -12- Befehl benutzt werden. Um diesen Kodierungsvorgang zu starten, ist es notwendig, zwei Zahlen ('keyA' und 'keyB') einzugeben. Nur mit diesen beiden Zahlen kann ein verschlsselter File wieder dekodiert werden! 'fileA' stellt den zu ver- /entschlsselnden File dar, 'fileB' repr„- sentiert die Ergebnisdatei. ACHTUNG, im Laufe der Zeit (oder besser: der Interpreterversionen) sind an diesem Programmteil immer wieder Žnderungen vorgenommen worden! Es ist daher fr Benutzer dieses Befehls notwendig, festzustellen ob ein Entschlsseln von Dateien, die mit einer „lteren Version verschlsselt worden sind, noch m”glich ist. Kann dies nicht mehr durchgefhrt werden, muž man den fraglichen File erst mit der „lteren Version wieder in seinen Urzustand bringen! Wie sicher die Kodierung ist, mag jeder selbst entscheiden. Die beiden Schlssel sind vom Typ 'long', damit ergeben sich schon einige Kodie- rungsm”glichkeiten. Es k”nnen brigens auchg negative Schlssel benutzt werden. BEISPIEL: crypt 123 4711 command.txt command.crp Die Datei 'command.txt' wird in verschlsselter Form im File 'command.crp' abgelegt. Soll aus 'command.crp' wieder der entschls- selte File entstehen, muž einfach crypt 123 4711 command.crp command.ent eingegeben werden. 'command.ent' repr„sentiert nun den entschlsselten File. Es h„tte natrlich auch irgendein anderer Dateiname gew„hlt werden k”nnen. Der Urfile (in diesem Fall 'command.txt') wird brigens weder gel”scht noch sonst irgendwie ver„ndert! -> date [dd.mm.yy] Ausgabe/Setzen des Datums. Wird kein Argument angegeben, wird einfach das Systemdatum ausgegeben, sonst erfolgt eine šbernahme des Arguments. BEISPIEL: date 1.5.88 Setzt das Systemdatum auf den 1. Mai 1988. date Hier wird nur das Systemdatum ausgegeben. -13- -> defkey (kompletter Name: define key) Belegung der Funktionstasten mit einem Befehl, der bei Drcken dieser Tasten ausgefhrt wird. 'f-key' umfažt den Bereich von 1 bis 20 (na ja, es gibt halt nur zwanzig Funktionstasten), wobei ab Nummer 11 die geshifteten Tasten gemeint sind, also wird z.B. Taste 14 duch SHIFT-F4 repr„sentiert. BEISPIEL: defkey 1 dir *.prg Jeder Druck auf F1 fhrt jetzt zum Aufzeigen aller PRG-Dateien im aktuellen Verzeichnis. Die Hauptanwendung fr diese Funktion drfte allerdings im Aufrufen von externen Programmen mit bestimmten Parametern liegen: defkey 12 x.prg F12 (SHIFT-F2) fhrt nun zum Starten des Programms 'x.prg'. -> device Ausgabe der angemeldeten Laufwerke. -> df (kompletter Name: disk free) Dieses Kommando zeigt den freien Speicherplatz des aktuellen Laufwerks an. -> dir [filedeskriptor(en)] (kompletter Name: directory) Aufzeigen aller (bestimmter) Dateien eines Ordners. Es k”nnen auch Laufwerksbezeichnungen bzw. Ordner angegeben werden. Wird kein Deskriptor angegeben, werden alle Files ausgegeben. Bei Angabe mehrerer Deskriptoren, werden sukzessive alle entsprechenden Dateien aufgezeigt. Zus„tzlich zu den Filename erfolgt eine Ausgabe von Erstellungsdatum, Gr”že und Fileattribut. Die Attribute werden sowohl in abgekrzter Form, als auch als Integer- wert (in Klammern) ausgegeben. Die Attributabkrzungen und ihre Bedeu- tung: - rw = Read and Write - ro = Read Only - hi = HIdden - sf = System File - vl = Volume Label -14- - di = DIrectory - wc = Written and Closed Natrlich kann ein File mehrere Attribute haben (z.B. wc und hi). Es werden dann alle aufgefhrt. BEISPIEL: dir Ausgabe aller Dateien des aktuellen Verzeichnisses. dir a: Ausgabe aller Files vom aktuellen Ordner auf Laufwerk A. dir *.prg a*.* Ausgabe aller PRG-Files und danach aller Dateien, die mit 'a' beginnen. dir /megamax/ Ausgabe aller Dateien im Verzeichnis 'megamax'. -> echo [string] Ausgabe von 'string' auf den Bildschirm. Wird kein String angegeben, erfolgt nur die Ausgabe einer Leerzeile. Sinnvoll ist dieses Kommando in Batchfiles. BEISPIEL: echo Na prima! Es wird 'Na prima!' ausgegeben. -> exit Verlassen des Interpreters und zurck zum Desktop. Das gleiche kann man auch durch Drcken von ^C erreichen. -> expand Dieser Befehl stellt die Umkehrung zu compress dar. Er dient der Wiederherstellung von mit compress behandelter Dateien. Der Ergebnis- file hat die Extension 'EXP'. -> find Es wird im kompletten Filesystem (also auch in den Unterverzeichnissen) nach 'file' gesucht. Wird eine passende Datei gefunden, wird diese mit vorangestelltem Pfadnamen ausgegeben. -15- BEISPIEL: find *.* Dieses Kommando wrde alle Files eines Laufwerks mit den zugeh”rigen Verzeichnisnamen ausgeben. find *.prg Dieser Befehl gibt alle PRG-Files aus, die sich auf dem aktuellen Laufwerk befinden. -> flags Ausgabe diverser Programmflags. Diese Flags werden sp„ter, bzw. immer bei den Befehlen fr die sie relevant sind, noch eingehender bespro- chen. Zuordnung der Kommandos: "Errorbreak" Befehl:errorbreak "History" Befehl:srhist "ž = Beta" Befehl:sz "Patch change" Befehl:pchange "Show batch commands" Befehl:text/notext "Save history" Befehl:savehist "Print title" Befehl:srtitle "Expand TAB" Befehl:srtab "Convert slash" Befehl:slash "Line numbers" Befehl:numbers Bei diesen Flags wird durch on/off angezeigt, ob die Funktion des entsprechenden Befehls aktiviert ist oder nicht. Die folgende Auflistung zeigt die Verbindung von Kommandos, die SetUp Funktion haben und ihre Representation in der Flag-Liste: "TAB" Befehl:settab "Lines per page" Befehl:lppage "Margin" Befehl:lpmargin "Start page" Befehl:page "start:" Befehl:setlp "stop :" Befehl:resetlp -> free Gibt den noch verfgbaren RAM-Speicherplatz aus. -16- -> head help [command(s)] Wird dieser Befehl ohne Argument(e) eingegebe oder einfach die HELP- Taste gedrckt, erfolgt eine Auflistung aller verfgbaren Kommandos. Diese Auflistung ist (leider) nicht alphabetisch geordnet, sondern entspricht der Reihenfolge in der neue Befehle dem Programm hinzugefgt worden sind. Das ist zwar nicht besonders sch”n aber zum Verschaffen eines kurzen šberblicks drfte es wohl gengen und die programmtech- nischen Žnderungen zum Ausgeben einer geordneten Liste, steht wohl in keinem sinnvollen Verh„ltnis zum Nutzen. Wird allerdings ein Argument (oder mehrere) angegeben, so erfolgt die Ausgabe einer Kurzbeschreibung. Diese Beschreibungen befinden sich in der Datei command.hlp, die sich immer in dem Verzeichnis befinden muž, von dem aus der Kommandoin- terpreter aufgerufen wurde. BEISPIEL: help dir rm Es werden die Kurzbeschreibungen zu den Kommandos dir und rm ausgege- ben. -> hide Wolltte man einen File so kennzeichnen, daž er auf dem Desktop nicht mehr erschien, konnte dies in „lteren Interpreterversionen mit diesem Befehl bewerkstelligt werden. Dieses Kommando gibt es nicht mehr! M”chte jemand trotzdem Dateien verstecken, kann er dies unter Verwen- dung von chmod tun. Es muž bei den Dateien Bit 1 (dezimal = 2) gesetzt sein, um eine hide-Kennzeichnung zu erreichen, bzw. muž dieses Bit bei normal sichtbaren Dateien gel”scht sein. Das ganze mit dem Verstecken funktioniert allerdings nur, wenn wirklich nur dieses eine Bit gesetzt -17- ist! Um eine Datei entsprechend zu kennzeichnen, muž man also in Zukunft "chmod 2" verwenden. Ich habe dieses Kommando entfernt, da es einige Leute gab, die lieber ein krzeres Programm haben wollten und dafr auf, zugegebenermažen, berflssige Befehle zu verzichten bereit waren. -> inverse Die Bildschirmdarstellung wird invertiert, d.h. war vor Eingabe des Befehls die normale Darstellung, also schwarz auf weiž, aktiv, so ist die Darstellung nun weiže Schrift auf schwarzem Grund. War die Darstellung weiž auf schwarz, wird wieder auf die normale Einstellung umgeschaltet. Es gibt einige Programme, die fr eine Invertierung der Bildschirmdar- stellung sorgen ohne den Originalzustand wieder herzustellen. Dieses Manko wird durch inverse aufgehoben. -> keyboard Ausgabe der Kommandos, die zum Editieren der Eingabe zur Verfgung stehen. -> keys Dieser Befehl sorgt fr eine Auflistung der Funktionstastenbelegungen (vgl. defkey). -> lock M”chte man den Rechner eine Weile angeschaltet stehen lassen, aber gleichzeitig Sorge dafr tragen, daž ihn kein anderer benutzt, so kann dies mit lock gemacht werden. Nach Eingabe des Kommandos wird der Benutzer aufgefordert, ein Passwort einzugeben. Zur Best„tigung muž diese Eingabe wiederholt werden. War es jedesmal das gleiche Wort, meldet der Rechner, daž er abgeschlossen (locked) ist. Will man nun weiterarbeiten, muž einfach erneut das Passwort eingegeben werden. Ist es falsch, erfolgt keine Reaktion, sonst erscheint wieder der normale Prompt. Ein Knacken des Schutzes kann brigens durch die RESET-Taste oder durch einfaches Aus-/Einschalten erfolgen (klar, oder?). -> lp (kompletter Name: lineprinter) Soll eine ASCII-Datei (oder mehrere) auf einem Drucker ausgegeben werden, geschieht dies durch dieses Kommando. Hat man einen Drucker- spooler in Betrieb, ist das eine recht nette Angelegenheit. Aužerdem gibt es bei Verwendung von lp keine Probleme mit TAB-Zeichen, da sie korrekt expandiert werden (wenn gewnscht). Es ist aužerdem m”glich, eine Titelseite auszugeben und vor dem eigentlichen Ausdruck -18- und nach dessen Abschluž, eine Steuersequenz an den Drucker zu schicken (vgl. auch settab, srtitle, setlp und resetlp). Ein Stoppen des Druckvorgangs kann jederzeit mit ^Z ausgel”st werden! BEISPIEL: lp command.txt Ausdruck der Datei 'command.txt'. -> lpmargin [intvalue] (kompletter Name: lineprinter margin) Anzahl der Blanks, die bei einem Ausdruck vor der eigentlichen Zeile kommen. Fehlt das Argument, ist diese Funktion ausgeschaltet. -> lppage [intvalue] (kompletter Name: lineprinter page) Anzahl der Zeilen pro Seite bei einem Ausdruck. Wird kein Argument angegeben, ist diese Funktion ausgeschaltet. Bei eingeschalteter Funktion, wird jeweils nach Erreichen der Zeilen- zahl ein Seitenvorschub durchgefhrt. -> ls [filedeskriptor(en)] (kompletter Name: list short) Dieser Befehl ist eine Abart von dir. Dort wird eine ausfhrliche Informationsfolge zu jedem File mit ausgegeben. Dies unterbleibt bei ls. Hier werden nur die Datei- bzw. Ordnernamen aufgelistet. -> merge Dieses Kommando wird zur Verbindung von zwei ASCII-Files benutzt. Dabei wird 'fileB' an 'fileA' angeh„ngt. 'fileB' wird nicht modifiziert! 'fileA' und 'fileB' drfen nicht die gleiche Datei darstellen, d.h. der Befehl "merge command.txt command.txt" wrde nicht funktionieren! -> mkdir (kompletter Name: make directory) Dieser Befehl erzeugt einen neuen Ordner. Man sollte allerdings nicht vergessen, daž nur eine bestimmte Verzeichnistiefe zul„ssig ist. Auch das '40-Ordner-Problem' sollte man im Auge behalten. Nach der Generierung des neuen Verzeichnisses, findet man dort bereits zwei Eintr„ge, n„mlich '..' und '.'. '.' stellte einen Verweis auf den Ordner dar, '..' ist ein Verweis auf das darberliegende Verzeichnis (vgl auch "cd .."). -19- BEISPIEL: mkdir schrott Es wird im aktuellen Directory das neue Unterverzeichnis 'schrott' eingerichtet. Mit "cd schrott" und dir kann man anschauen, welche Dateien dabei erzeugt worden sind ('.' und '..', welche sonst?). -> more mouseoff Der Sinn dieses und des n„chsten Befehls mag auf den ersten Blick nicht einleuchten, aber es steckt trotzdem einer dahinter. Das Kommando schaltet den Mauszeiger aus. Normalerweise ist im Inter- preter dieser Zeiger sowieso nicht sichtbar. Es gibt aber Programme, die diesen Zeiger sehr wohl benutzen, und h„ngt sich nun solch ein Programm auf, kann es unter Umst„nden zu einem herrlichen Durcheinander mit der Maus kommen. Wird z.B. ein Programm mit der Extension PRG aufgerufen, schaltet der Interpreter automatisch den Mauszeiger vor dem Programmaufruf ein. Schaltet dieses Programm nun diesen Zeiger wieder aus und ihn auch bei erreichen des Programmendes nicht wieder ein (wie es gentlemanlike w„re), so gibt es Probleme, da der Interpreter nach dem Lauf des Programms den Zeiger abschaltet, und zwar unabh„ngig davon, ob er ein- oder ausgeschaltet war. Ich nehme mal an, daž die Problematik bis jetzt noch nicht so ganz -20- einleuchtet, schliežlich will man ja, daž der Mauszeiger verschwindet. Leider ist das GEM aber so organisiert, daž es sich merkt, wie oft der Zeiger ausgeschaltet worden ist, d.h. wird er zweimal ausgeschaltet, muž er, um wieder sichtbar zu werden, auch wieder zweimal eingeschaltet werden. Der Interpreter hat nun aber keine Ahnung, wie oft der Zeiger ausgeschaltet wurde. Der Benutzer sollte nun selbst fr eine Korrektur des Problems sorgen. Dies ist notwendig, wenn mit Anwendungen gearbei- tet wird, die den Mauszeiger verwenden. Es kann sonst passieren, daž in einem solchen Programm, in dem die Maus gebraucht wird (z.B. ein GEM- Editor), keine auftaucht. Es macht nicht viel Spaž, jetzt wie ein blindes Huhn herumzuirren, bis man wieder aus dem Programm rauskommt (wenn man nicht lieber gleich RESET drckt). Man sollte also, falls das angesprochene Problem aufgetaucht ist, solange den Mauszeiger anschalten (mouseon), bis er wieder sichtbar ist. Dann gibt man einmal mouseoff ein und die Welt ist wieder in Ordnung. Normalerweise reicht es brigens zweimal mouseon einzugeben. Der Aufwand bleibt also in einem vertretbaren Rahmen. -> mouseon Dieser Befehl schaltet den Mauszeiger ein. -> mv (kompletter Name: move) Zum Umbenennen eines Files wird dieses Kommando zur Verfgung gestellt. Aus 'fileA ' wird 'fileB'. mv kann mit '*' benutzt werden. Man sollte allerdings ein bižchen aufpassen, da die M”glichkeiten zum Unsinn anstellen nicht zu verachten sind. BEISPIEL: mv oldie.dat uroldie.dat Der File 'oldie.dat' wird in den File 'uroldie.dat' umbenannt. -> numbers Schaltet ein Flag ein/aus, das bestimmt, ob bei einem Ausdruck Zeilennummern ausgegeben werden. flags kann zur šberprfung der aktuellen Einstellung benutzt werden. -> od (kompletter Name: out dump) M”chte sich der Benutzer bestimmte Dateien in hexadezimaler Schreib- weise anschauen, so kann er dies mit Hilfe dieses Kommandos tun. Der/die File(s) werden seitenweise auf dem Bildschirm ausgegeben. Ein Abbruch kann durch Drcken von ^Z erfolgen. -21- Der Befehl ist so ausgelegt, daž auch auf andere Laufwerke bzw. Unterverzeichnisse zugegriffen werden kann. BEISPIEL: od command.txt Gibt die Datei 'command.txt' hexadezimal aus. od /megamax/headers/*.h Hexadezimale Ausgabe aller '.h'-Dateien die sich im Verzeichnis '/megamax/headers/' befinden. -> page [intvalue] Ist diese Funktion eingeschaltet, wird am Seitenanfang bei einem Ausdruck der Filename und die aktuelle Seitennummer ausgegeben. Das Argument gibt die Startseitennummer an. Bei fehlendem Argument ist die Funktion ausgeschaltet. -> path Angabe eines Pfades, der zum Auffinden eines Programmes durchsucht werden soll. Es k”nnen maximal zwanzig Pfade angegeben werden. Programmnamen mssen, falls sie nicht im aktuellen Verzeichnis zu finden sind, komplett angegeben werden! Pfadnamen mssen durch '/' (bzw. '\') abgegrenzt sein. Dies gilt allerdings auch, wenn es sich nur um Laufwerksnamen handelt (z.B. "path a:/ c:/"), dann wird dort allerdings nur im Hauptverzeichnis gesucht. In vorhergehenden Programmversionen erfolgte kein Sprung in die zu durchsuchenden Ordner. Dieses Manko habe ich nun beseitigt. Dies gilt allerdings nur fr Programme mit der Extension '.PRG'! Ich sollte vielleicht den Grund fr diese Einschr„nkung nennen: Ich benutze einen bestimmten Ordner zur Aufbewahrung von Tool-Program- men, die mehr oder weniger die Endungen '.TTP' haben. Nehme ich nun diesen Ordner in die zu durchsuchenden Pfade auf, wird zwar bei Auffinden des Programms in den Ordner gesprungen, aber die Argumente (in der Hauptsache Files) befinden sich halt nicht dort, also funktio- niert das ganze nicht. Da die meisten Benutzer GEM-Anwendungen am laufen haben, die z.B. 'RSC'-Dateien nachladen und die die Endung '.PRG' besitzen, drfte man mit der Einschr„nkung leben k”nnen. Selbstverst„ndlich kann dieser automatische Sprung in den zu durchsu- chenden Ordner auch abgeschaltet werden (vgl. pchange). Das Kommando verh„lt sich dann wie in den „lteren Interpreterversionen. Aužerdem ist es jetzt auch m”glich, wie im Hauptverzeichnis, nur noch Teilstrings zum Starten eines Programmes einzugeben. Fr die Eindeutig- keit des Aufrufs muž allerdings der Benutzer selber sorgen! Man sollt vielleicht auch noch beachten, daž mit der Anzahl der zu -22- durchsuchenden Verzeichnisse auch die Zeit bis zur Auffindung bzw. bis zur Meldung, daž ein Programm nicht gefunden werden kann, steigt! Die Suche nach einem Programm geschieht in folgender Reihenfolge: 1. wenn ALIAS-Eintrag, dann Umwandlung 2. wenn mit Pfadangabe, dann Ausfhrung 3. wenn in aktuellem Verzeichnis, dann Ausfhrung 4. die mit path festgelegten Wege absuchen und ggf. Ausfhrung es wird dabei die Argumentfolge in Reihe abgesucht! Die Bedeutung von ALIAS wird in einem extra Abschnitt erl„utert! Da ich kein rechtes Vertrauen in die F„higkeiten des TOS habe, existiert beim Wechseln der Pfade ein Kontrollmechanismus, der bei einem fehlerhaften Ordneransprung eine Warnung ausgibt. Dies sollte eigentlich nie der Fall sein, aber man soll nie nie sagen was das TOS betrifft. BEISPIEL: path /erste/ a:/ c:/oben/unten/ Ein externes Programm wrde in diesem Fall erst im aktuellen Verzeich- nis gesucht werden. Kann es dort nicht gefunden werden, wird versucht, es im Ordner '/erste/' zu finden. Ist es auch dort nicht vorhanden, wird zum Hauptverzeichnis auf Laufwerk A gegangen. Bei einem weiteren Fehlschlag wird nun noch auf Laufwerk C im Directory '/oben/unten/' gesucht. path Ohne Argumente wird nur der eingestellte Suchpfad ausgegeben. -> pchange (kompletter Name: path change) Schaltet den Pfadwechsel des path-Kommandos ein/aus. Mit flags kann die aktuelle Stellung berprft werden. Voreingestellt ist das Wechseln der Directories. -> pwd (kompletter Name: print working directory) Dieser Befehl zeigt den aktuellen Pfad an, in dem man sich gerade befindet. -> reset Der Rechner fhrt einen Reset aus. -23- -> resetlp [intvalue(s)] (kompletter Name: reset lineprinter) Dieser Befehl wurde bereits beim lp-Kommando erw„hnt. Wird lp zum Ausdruck von Dateien benutzt, wird vor oder nach dem eigentlichen Druckvorgang eine Steuersequenz an den Drucker geschickt (z.B. Schrift- gr”že oder ein Initialisierungskommando). resetlp ist nun fr die Sequenz zust„ndig, die nach dem Ausdruck an den Drucker geschickt wird. M”chte der Benutzer, daž keine solche Folge geschickt wird (Defaulteinstellung), muž er einfach resetlp eingeben. Mit flags kann man sich die aktuell gltige Steuersequenz anschauen. BEISPIEL: resetlp 12 28 64 Diese Sequenz sorgt nach Abschluž eines Ausdrucks fr einen Seiten- vorschub und der Umschaltung auf die Grundeinstellung eines NEC-P6- Druckers. -> rm (kompletter Name: remove) Zum L”schen von Dateien findet dieser Befehl Verwendung. Es k”nnen damit sowohl ganze Filegruppen als auch nur bestimmte Einzeldateien entfernt werden (Verwendung von Wildcarts ist m”glich). Man sollte bei Benutzung des Kommandos ein bižchen aufpassen, sonst l”scht man Dateien, die man eigentlich noch braucht. Dieser Befehl erlaubt den Zugriff auf andere Verzeichnisse und Lauf- werke. Es kann vorkommen, daž Files vor dem L”schen geschtzt sind (Attribut: nur lesbar). Der Befehl ist nicht in der Lage, solche Dateien zu entfernen (vgl. auch save und unsave)! BEISPIEL: rm *.* Hier werden alle Files gel”scht. rm *.prg command.txt Hier werden erst alle PRG-Dateien entfernt, im Anschluž daran der File 'command.txt'. rm c:/copy/c_files/ Auf Laufwerk C werden alle Dateien im Unterverzeichnis '/copy/c_files/' gel”scht. -24- -> rmdir (kompletter Name: remove directory) Es kann vorkommen, daž Ordner entfernt werden sollen. Der geeignete Befehl findet sich in rmdir. Der zu l”schende Ordner muž allerdings leer sein! BEISPIEL: rmdir schrott Diese Eingabe bewirkt ein Entfernen von Directory 'schrott'. -> save Files, auf die dieser Befehl angewandt wird, sind nur noch lesbar. Rckg„ngig gemacht werden kann dieses Kommando mit unsave. Man sollte beachten, daž es Programme gibt, die auf solchermažen geschtzte Dateien mit dem frohen Werfen von Bomben reagieren. Es muž also vor Verwendung solcher Programme unsave benutzt werden! -> savehist (kompletter Name: save history) Per Defaulteinstellung wird beim Verlassen des Interpreters ein File history.dat angelegt, in dem sich die zuletzt gemachten Eingaben befinden. Dieser Befehl bewirkt nun ein Ein-/Ausschalten dieser Abspeicherfunk- tion. Mit flags kann bestimmt werden, ob sie gerade eingeschaltet ist und kann dann, je nach Benutzerwunsch, umgeschaltet werden (toggle-Funk- tion). -> setlp [intvalue(s)] (kompletter Name: set lineprinter) Die analoge Funktion zu resetlp findet sich in diesem Befehl. Die hier angebbare Steuersequenz wird vor dem eigentlichen Ausdruck an den Drucker geschickt. Soll nichts geschickt werden (default), ist einfach wieder setlp einzugeben. Mit flags kann die gltige Steuersequenz angeschaut werden. -> settab (kompletter Name: set tabulator) Eine weitere Funktion, die den Ausdruck steuert, wird durch dieses Kommando abgedeckt. Der Benutzer ist hiermit in der Lage, die Tabula- torweite zu bestimmen (defaultm„žig auf 8 Zeichen). Die minimale Weite liegt bei zwei Zeichen! settab beeinflužt brigens nicht nur Druckerausgaben. Auch Ausgaben via cat oder more benutzen die eingestellte Tabulatorweite! Dieser Befehl hat bei Listings natrlich nur eine Bedeutung, wenn das -25- Tabulatorflag, daž angibt ob TAB oder die entsprechende Anzahl Blamks gesendet wird, gesetzt ist. flags zeigt die aktuelle Tabulatorweite an. -> slash Normalerweise kann man statt '\' auch '/' benutzen (z.B. bei cd). Es gibt aber externe Programme, die mit Argumenten gefttert werden k”nnen, die ein '/' enthalten. Da der Interpreter '/' in ein '\' umwandelt, kann es hier zu Problemen kommen. Mit slash kann diese Konvertierung ein- bzw. ausgeschaltet werden. Mit flags kann der aktuelle Zustand angeschaut werden. -> srhist (kompletter Name: set/reset history) Normalerweise werden die letzten fnfzig Eingaben in einer Historyta- belle gehalten. Damit ist der Benutzer in der Lage, auf einfache Weise, auf diese Kommandos Bezug zu nehmen (s.u.). Um diese Eintragungen ein-/auszuschalten, kann dieser Befehl benutzt werden. Mit flags kann der aktuelle Stand des entsprechenden Flags angeschaut werden. srhist erzeugt dann die entgegengesetzte Stellung. Finden keine Eintragungen in die Historytabelle statt, erscheint der Eingabez„hler invers. -> srtab (kompletter Name: reset tabulator) Normalerweise (default) sendet der Befehl lp keine TAB-Zeichen an den Drucker, sondern expandiert diese Zeichen korrekt und schickt die entsprechende Anzahl Blanks. Dieser Befehl kann nun zum Set- zen/Rcksetzen dieser F„higkeit benutzt werden. Mit flags kann die aktuelle Einstellung berprft werden. -> srtitle (kompletter Name: set/reset title) Nun zum vorletzten Befehl, mit dem ein Druckerlisting beeinflužt werden kann. Defaultm„žig wird vor jedem Ausdruck ein Titelblatt erzeugt, auf dem der Filenamen steht. Ist dies jedoch nicht gewnscht, kann mit srtitle diese M”glichkeit abgeschaltet (oder auch wieder eingeschaltet) werden. Mit flags kann mal wieder der aktuelle Zustand des entsprechenden Flags angeschaut werden. -> string Dieser Befehl dient dem Absuchen von Dateien nach einer bestimmten Zeichenfolge. Es kann dabei sowohl nur eine Datei als auch mehrere angesprochen werden (ber '*'). Der Suchstring muž zwischen zwei -26- gleiche Zeichen eingeschlossen sein! Der Befehl bezieht sich immer auf das aktuelle Verzeichnis. Die maximale L„nge eines solchen Strings betr„gt zwanzig Zeichen. šberschreitet er diese, erfolgt eine Krzung auf diese Zeichenl„nge! BEISPIEL: string *.* /Oh sole mio/ Es werden alle Dateien des aktuellen Ordners nach dem String 'Oh sole mio' abgesucht. Wird der String in einem File gefunden, wird eine entsprechende Meldung ausgegeben. string command.txt *Bingo* In diesem Fall wird der File 'command.txt' nach dem String 'Bingo' abgeklappert. Man sieht, daž die Argumentbegrenzungen v”llig verschieden sein k”nnen, im oberen Beispiel '/', im unteren '*'. Sie mssen nur bei der jeweiligen Eingabe bereinstimmen. Es versteht sich wohl von selbst, daž diese Begrenzungen nicht im eigentlichen Suchstring enthalten sein drfen! -> sz Der letzte Befehl zur Druckersteuerung. Er entstand aus dem Mangel meines Druckers, ein vernnftiges 'ž' machen zu k”nnen. Ist das entsprechende Flag gesetzt, wird einfach der Code fr ein Beta (225) geschickt, wenn im Text ein 'ž' vorkommt. Ist das Flag nicht gesetzt, wird der eigentliche 'ž'-Code geschickt (158). Mit flags kann die Flagstellung berprft werden. Defaultm„žig ist dieses Flag brigens gesetzt, also wird Beta geschickt! -> time [hh:mm] Das Setzen bzw. Abfragen der Uhrzeit geschieht mit diesem Kommando. Wird kein Argument angegeben, so erfolgt eine Ausgabe der aktuellen Systemzeit, sonst wird das Argument als neue Systemzeit bernommen. Bei der Ausgabe werden auch die Sekunden angegeben. Beim Setzen drfen diese nicht angegeben werden! BEISPIEL: time 12:4 Setzen der Uhrzeit auf 12 Uhr 4 Minuten. Die Sekunden werden automa- tisch auf Null gesetzt. -> tree Ausgabe aller Ordner und Unterordner eines Laufwerks. -27- -> unsave Files, die nur lesbar sind, also nicht gel”scht werden k”nnen, werden durch dieses Kommando entschtzt. Der umgekehrte Befehl ist save. -> version Dieses Kommando gibt das Erstellungsdatum aus. Es existiert keine Versionsnummer mehr! -> wc (kompletter Name: word count) Interessiert man sich fr die Anzahl von Ziffern, Zeilen und Zeichen eines Files, so findet dieser Befehl Verwendung. Alles in allem kein besonders wichtiges Kommando. 3.1 Besondere Befehle Die folgenden vier Befehle die zum Erzeugen eines ASCII-Files benutzt werden konnten, gibt es nicht mehr: open write append close Dies stellt allerdings keine Einschr„nkung bei der einfachen Kreierung von Textdateien dar. Ich m”chte den Benutzer auf den Abschnitt, der sich mit der Ausgabeumleitung befažt, verweisen. Die Verbindung dieser M”glichkeit mit dem echo-Befehl erlaubt s„mtliche Aktionen der vier weggefallenen Befehle. Der Grund fr das Streichen der Kommandos war wieder der Versuch, den Interpreter etwas kompakter zu machen und redundante Befehle, die nur einen unn”tigen Ballast darstellen, zu entfernen. Ich glaube, daž zumindest in diesem Fall keine Einschr„nkung fr den Benutzer gegeben ist. M”chte der Benutzer das Laufwerk wechseln, kann er dazu den cd-Befehl benutzen, dies ist aber nicht unbedingt notwendig. Es ist auch m”glich, diesen Wechsel einfach durch Laufwerkskennung und anschlieženden Dop- pelpunkt vorzunehmen. BEISPIEL: a: Wechsel zu Laufwerk A. -28- 3.2 Zahlkonvertierungen Es kommt ab und zu vor, daž Zahlumrechnungen vorgenommen werden mssen. Der Interpreter stellt hier drei Funktionen zur Verfgung: -> # Eingabe einer Dezimalzahl und deren Umrechnung in das hexadezimale und oktale Žquivalent. -> $ Eingabe einer hexadezimalen Zahl. Als Resultat werden die dezimalen und oktalen Žquivalente ausgegeben. -> \ Und als letztes die Umrechnung fr oktale Zahlen. Man kann hier brigens ein Problem erkennen, daž eventuell auftritt, wenn mit '\' ein Programm aufgerufen werden soll. Im Zweifelsfall muž man einfach nur die Laufwerksbezeichnung mit angegeben oder mit '/' arbeiten. -29- 4 Die ALIAS-Einrichtung 4.1 Einfhrung Der Kommandointerpreter bietet dem Benutzer die M”glichkeit, bestimmte Befehle umzubenennen. Wird zum Beispiel ”fters ein spezielles Programm aufgerufen, kann dieser Aufruf umbenannt werden. Sei das Programm 'xcompiler.prg' immer wieder aufzurufen, kann dieses Kommando z.B. in 'cc' umbenannt werden (sinnigerweise gehe ich in diesem Beispiel davon aus, daž dieser omin”se 'xcompiler' ein C- Compiler ist. 'cc' w„re sonst ein recht verwirrender Name). Wird ein Editor ”fters zum Editieren eines bestimmten Files aufgerufen (bei einer Programmerstellung passiert dies eigentlich dauernd), kann der normale Aufruf 'editor.prg file' einfach in einen krzeren, z.B. 'edit', umbenannt werden. Schreibfaule Naturen und Leute, die mit der Namensgebung der internen Kommandos nicht besonders glcklich sind, k”nnen durch diesen Mechanis- mus ihre eigene Nomenklatur aufbauen. S„mtliche Umbenennungen k”nnen im File alias.dat abgelegt werden. Diese Datei wird zum Programmbeginn von command.prg eingelesen (soweit vorhanden natrlich). Dies funktioniert allerdings nur, wenn sich diese Datei im gleichen Verzeichnis wie der Interpreter befindet! alias.dat wird brigens beim Verlassen von command.prg nicht automa- tisch abgespeichert (vgl. savealias). Die alternativen Kommandonamen k”nnen also sofort genutzt werden und mssen nicht zu jeder Sitzung neu eingegeben werden! Es ist natrlich m”glich ganz ohne alias.dat auszukommen und die Erzeugung der Umbenennungen durch einen Batchfile vorzunehmen. Der bequemere Weg erscheint mit jedoch die Verwendung dieser Datei zu sein. 4.2 ALIAS-Befehlssatz -> alias [string(s)] Aufzeigen aller aktuell gltigen Umbenennungen und ihrer Žquivalente. Es ist auch die selektive Auswahl eines Eintrags (bzw. mehrerer) m”glich. -> delalias (kompletter Name: delete alias) L”schen eines Alias-Eintrags aus der Alias-Liste. -> getalias Der File alias.dat wird mit diesem Kommando eingelesen. -30- -> newalias Umbenennung von 'old' in 'new'. Dieser Befehl dient also zur Alias- Erzeugung. Neue Eintr„ge werden brigens nicht an die Alias-Liste angeh„ngt, sondern stehen immer an erster Stelle (Zeit- und Codeersparnis). BEISPIEL: newalias cc xcompiler.prg Die Beschreibung steht eigentlich schon in dem obigen Blabla. Jede Eingabe von 'cc' wird duch 'xcompiler.prg' ersetzt. newalias al alias Statt alias fhrt nun auch al zum Aufzeigen der Alias-Eintr„ge. -> savealias Abspeichern der gltigen Umbenennungen im File alias.dat. Es muž beachtet werden, daž dieses Ablegen der Datei nicht automatisch erfolgt! Man kann sich brigens mithilfe eines Batchfiles eine Enderoutine schreiben, die man zum Verlassen des Interpreters aufruft und die savealias enth„lt. -31- 5 Die History-Einrichtung 5.1 Einfhrung Ein weiteres Bonbon des Interpreters ist die M”glichkeit, bereits eingegebene Befehle auf einfache Weise erneut aufzurufen. Dies ist allerdings auf die letzten fnfzig Eingaben beschr„nkt. UNIX-Kennern drfte diese Einrichtung und ihre Vorzge wohl hinl„nglich bekannt sein. Ein einfaches Beispiel soll die praktische Anwendung dieser F„higkeit aufzeigen. Zum Erstellen eines Programms in C, PASCAL u.s.w. sind immer die gleichen Schritte notwendig: Editieren -> Compilieren -> Linken -> Probelauf Meist erfolgt zwischen Compilieren und Linken noch eine Kurzvisite beim Editor, weil halt doch noch ein kleines Fehlerchen im Sourcecode aufgetaucht ist. Die Kommandos fr das Beispiel seien nun folgende: 77>ed bsp.pas Bedeutung: Aufruf des Editors zur Bearbeitung des Files 'bsp.pas'. 78>pas bsp.pas Bedeutung: Aufruf des Compilers zur Objektfileerzeugung. Sollten jetzt Fehlermeldungen aufgetaucht sein, geht's wieder zurck zum Editor. Also wieder 79>ed bsp.pas reinklopfen u.s.w. Bevor es jetzt weitergeht, sollte ich vielleicht verraten, daž die Zahlen vor den Beispieleingaben vom Interpreter geliefert werden. Dieser kleine Hinweis ist fr das weitere Verst„ndnis ziemlich hilf- reich! Durch die Historyeinrichtung gengt es, wenn der Benutzer bei Befehl 79 ("ed bsp.pas") einfach nur "!77" eingibt. Es wird dann Kommando 77 erneut ausgefhrt. Es kann aber nicht nur ber die Kommandonummern auf zurckliegende Eingaben Bezug genommen werden; die Eingabe "!e" h„tte auch zum -32- Wiederaufruf des Editors gefhrt, d.h. es wird bei dieser Eingabe nach dem letzten Kommando gesucht, daž mit dem Buchstaben 'e' begonnen hat, und, falls es gefunden werden kann, erfolgt ein erneuter Aufruf des nun expandierten Befehls (hier w„re dies "ed bsp.pas"). Die M”glichkeit, alte Kommandos ber den Anfangsbuchstaben zurckzuho- len, ist nicht auf einen Buchstaben begrenzt. Es wird nach dem letzten Kommando gesucht, daž mit dem eingegebenen Teilstring bereinstimmt. Ein weiteres Beispiel soll das verdeutlichen: Hat der Benutzer krzlich den Befehl "cp afile bfile" eingegeben und auf diesen Befehl folgend das Kommando "cmp afile bfile", so wrde durch "!c" der cmp-Befehl erneut aufgerufen werden. Durch Eingabe von "!cp" wrde aber ein eindeutiger Bezug auf den Kopierbefehl geschaffen und dieser ausgefhrt werden. Es ist also m”glich, durch beliebig lange Teileingaben eindeutige Zuordnungen zu vorhergehenden Befehlen zu bilden. Es sei noch einmal darauf hingewiesen, daž sich in der History-Liste nur die letzten fnfzig Befehle befinden und daž man nur diese erneut durch die History-Kommandos aufrufen kann. Jede Neueingabe wird in diese Liste eingetragen, dafr wird der „lteste Eintrag entfernt. Normalerweise mžte aber der Umfang der gemerkten Kommandos mehr als ausreichend sein. Das bisher gesagte m”chte ich mit einem Beispiel noch etwas anschauli- cher machen: 120>cp afile bfile 121>cmp afile bfile 122>!c 123>!cp 124>!121 Es werden wieder cp und cmp verwendet. Die Kommandos 120 und 121 mžten eigentlich klar sein. Kommando 122 ruft das letzte Kommando auf, daž mit dem Buchstaben 'c' begann auf, in diesem Fall cmp. Kommando 123 ruft den letzten Befehl auf, der mit den Buchstaben 'cp' beginnt, und das ist Kommando 120. Befehl 124 bezieht sich nun explizit auf ein Kommando, den cmp-Befehl. Zus„tzlich zu den !-Kommandos gibt es noch eine weitere M”glichkeit, auf alte Eingaben zugreifen zu k”nnen: Wer schon auf einer VAX unter VMS gearbeitet hat, drfte mit der Verwendung der CURSOR-UP bzw. CURSOR-DOWN-Tasten in diesem Zusammenhang vertraut sein. Auch dieser Interpreter erlaubt es mit Hilfe dieser Tasten, alte Befehle wieder sichtbar zu machen. Es ist aužerdem m”glich, durch Verwendung der Cursortasten und der bereits am Anfang erw„hnten Tasten, diese alten Kommandos frei zu editieren. -33- Vorhergehende Befehle werden mit der CURSOR-UP-Taste aufgerufen, ein Zurckbl„ttern wird durch die CURSOR-DOWN-Taste bewerkstelligt. 5.2 Die !-Befehle -> h (kompletter Name: history) Dieser Befehl gibt alle in der History-Liste stehenden Eintr„ge auf den Bildschirm aus (die Eingabe von history bewirkt das gleiche). -> ! Hier wird das Kommando mit der Nummer 'nr' noch einmal aufgerufen. In Verbindung mit der folgenden Historyfunktion '!' muž an dieser Stelle leider auf einen Schwachpunkt hingewiesen werden! Pro- gramme, die mit einem Ziffernstring beginnen und die nun durch '!' erneut aufgerufen werden sollen, kommen nicht zur Ausfhrung (bzw. nur dann, wenn zuf„lligerweise der Ziffernstring mit der Kommandonummer bereinstimmt), d.h. Zahlen die sich auf Kommando- zeilen beziehen, haben immer Vorrang vor anderen Strings! Das soll aber nicht heižen, daž es unm”glich ist, solche speziellen 'Ziffern'- Eingaben zu wiederholen. Nur muž man dann statt einem Ausrufezeichen zwei verwenden! Ein Beispiel soll diese Problematik etwas beleuchten: 101>1.prg 102>!!1 103>!1 Kommando 101 ruft ein Programm '1.prg' auf, 102 wiederholt diesen Aufruf. Nummer 103 fhrt zu einer Fehlermeldung, da der Befehl mit der Nummer 1 nicht mehr in der Historytabelle vorhanden ist. -> ! Es soll das letzte Kommando gestartet werden, daž mit 'string' beginnt. Man beachte die beim vorhergenden Kommando angesprochene Restriktion dieses Befehls! -> !! Die letzte Eingabe wird wiederholt. Žltere Versionen des Kommandointerpreters erlaubten statt zwei Ausrufe- zeichen auch die Verwendung von nur einem. Dies fhrt nun zu einer Fehlermeldung! -34- 6 Das Batch-Processing 6.1 Einfhrung Ich will nun auf die n„chste F„higkeit des Interpreters eingehen, die Abarbeitung von Batchdateien. Leider wird diese M”glichkeit auch auf Systemen, die dafr bereits 'serienm„žig' eingerichtet sind, zu selten genutzt. Lieber gibt ein Benutzer immer wieder die gleiche Befehlsfolge ein, als sich eine Datei zu erstellen, die diese Folge enth„lt und die einfach nur aufgerufen werden muž. In einer Batchdatei kann prinzipiell jedes der bisher besprochenen Kommandos stehen. Es gibt noch eine ganze Reihe weiterer Befehle, die den Ablauf innerhalb eines solchen Files steuern (z.B. Sprungmarken). Wird in einem Batchfile viel gesprungen, bzw. finden Schleifendurch- l„ufe statt, sollte der File in einer RAM-Disk abgelegt und gestartet werden. Das bringt zum einen einen gewissen Zeitgewinn und nutzt auf der anderen Seite die Diskette nicht so ab. Ich m”chte es nicht unerw„hnt lassen, daž der Interpreter den Batchfile nicht auf einmal einliest und dann abarbeitet, sondern Kommando fr Kommando holt. Dadurch wird etwas Speicher gespart und die Verwaltung ist um einiges einfacher. Die Abarbeitung einer Batchdatei kann jederzeit durch ^Z abgebrochen werden! Befehle eines Batchfiles werden nicht in die History-Liste aufgenommen! Die im Folgenden beschriebenen Befehle k”nnen zum Teil auch im Direktmodus eingegeben werden, dies ist allerdings bei einigen Komman- dos nicht sehr sinnvoll. Wichtige Žnderung: In den „lteren Versionen des Interpreters gab es die festeingebaute Variable counter. Seit Einfhrung der Variablen, ist diese und alle ihre Funktionen nicht mehr notwendig. Um den Programmcode zu krzen, habe ich deshalb diese Variable entfernt. Benutzer von counter- Befehlen, mssen diese durch entsprechende Variablenkommandos ersetzen! 6.2 Befehlssatz -> batch [arg0...arg9] Aufruf einer Batchdatei 'file'. 'arg0' bis 'arg9' entsprechen Strings. Innerhalb eines Batchfiles k”nnen Platzhalter gesetzt werden ('$0' bis -35- '$9'). Diese werden durch die Strings ('arg0' bis 'arg9') bei einem Abarbeiten des Batchfiles ersetzt. Dadurch wird erreicht, daž z.B. eine Batchdatei, die die Compilierung und das Linken eines Sourcefiles zusammenfažt, fr unterschiedliche Sourcefiles Verwendung finden kann. Die Argumente mssen aufsteigend bei 0 beginnend eingesetzt werden, d.h. jedes '$0' wird durch das erste Stringargument ersetzt, jedes '$9' wrde durch jedes neunte Stringargument ersetzt werden. Es stehen also maximal zehn solche Platzhalter zur Verfgung. Weiter unten folgen einige Beispiele, die unter anderem die Verwendung dieser Argumentersetzung beleuchten sollen. Fr faule Benutzer gibt es die M”glichkeit, auf die Extension '.COM' zu verzichten, auch wenn die Batchdatei diese besitzen sollte. Kann der Interpreter einen angegebenen Batchfile nicht finden, versucht er noch durch Anh„ngen von '.COM' zum Erfolg zu kommen. Beispielsweise wrde die Datei 'BSP.COM' durch "batch bsp" und durch "batch bsp.com" aufgerufen werden. Ich m”chte an dieser Stelle betonen, daž ein Batchfile durchaus keine Extension haben muž. Jeder gltige Filename kann fr eine Batchdatei verwendet werden! Es k”nnen maximal 3 Batchfiles zur gleichen Zeit laufen (sich gegensei- tig aufrufen)! Die Argumente sind in jedem dieser drei m”glichen Dateien unterschiedlich, d.h. besitzt File A die Belegung 'BEISPIEL' fr '$0' und ruft dann File B auf, so ist dort '$0' unbesetzt, wenn beim Aufruf kein Argument explizit angegeben worden ist. Das mit den Argumenten m”chte ich an dieser Stelle noch an einem kleinen Beispiel zu verdeutlichen versuchen. Ich gehe mal davon aus, daž man sich in command.prg befindet. Die folgende Eingabesequenz erzeugt nun eine Batchdatei 'BSP.COM', die nichts anderes macht, als zwei Argumente mit echo auszugeben. Der Benutzer kann daran die Wirkung der $-Ersetzung durch Eingabeparameter erkennen (hoffentlich). 80>echo|bsp.com 81>echo||bsp.com echo $0 $1 82>batch bsp.com arg1 arg2 arg1 arg2 83> Je nachdem mit welchen Argumenten diese Datei nun aufgerufen wird, „ndert sich die Ausgabe. Man sollte sich ruhig auch mal anschauen, welche Ausgabe bei fehlender Argumentangabe kommt bzw. bei Angabe von drei oder noch mehr Parametern. -> @ [arg0 ... arg9] Analog zu batch, nur diesmal mit @. Dieses Kommando ist einfach nur fr die Liebhaber von VMS gedacht. -36- -> ?arg